/**
 * 表单验证工具函数
 * 提供通用的表单验证逻辑
 */

export interface ValidationResult {
  isValid: boolean
  message?: string
}

/**
 * 验证用户名
 * @param username 用户名
 * @param minLength 最小长度
 * @param maxLength 最大长度
 */
export function validateUsername(username: string, minLength = 3, maxLength = 20): ValidationResult {
  if (!username || username.trim().length === 0) {
    return { isValid: false, message: '请输入用户名' }
  }

  if (username.length < minLength) {
    return { isValid: false, message: `用户名长度至少${minLength}位` }
  }

  if (username.length > maxLength) {
    return { isValid: false, message: `用户名长度不能超过${maxLength}位` }
  }

  // 简单的用户名格式验证（字母、数字、下划线）
  const usernameRegex = /^[a-zA-Z0-9_]+$/
  if (!usernameRegex.test(username)) {
    return { isValid: false, message: '用户名只能包含字母、数字和下划线' }
  }

  return { isValid: true }
}

/**
 * 验证邮箱地址
 * @param email 邮箱地址
 */
export function validateEmail(email: string): ValidationResult {
  if (!email || email.trim().length === 0) {
    return { isValid: false, message: '请输入邮箱地址' }
  }

  // 邮箱格式正则表达式
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
  if (!emailRegex.test(email)) {
    return { isValid: false, message: '请输入有效的邮箱地址' }
  }

  return { isValid: true }
}

/**
 * 验证邮箱地址（可选）
 * @param email 邮箱地址
 */
export function validateOptionalEmail(email: string): ValidationResult {
  if (!email || email.trim().length === 0) {
    return { isValid: true } // 邮箱为空时通过验证
  }

  // 邮箱格式正则表达式
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
  if (!emailRegex.test(email)) {
    return { isValid: false, message: '请输入有效的邮箱地址' }
  }

  return { isValid: true }
}

/**
 * 验证密码
 * @param password 密码
 * @param minLength 最小长度
 */
export function validatePassword(password: string, minLength = 6): ValidationResult {
  if (!password || password.length === 0) {
    return { isValid: false, message: '请输入密码' }
  }

  if (password.length < minLength) {
    return { isValid: false, message: `密码长度至少${minLength}位` }
  }

  // 密码强度检查（可选）
  if (password.length < 8) {
    return { isValid: true, message: '建议密码长度至少8位以增强安全性' }
  }

  return { isValid: true }
}

/**
 * 验证密码确认
 * @param password 原密码
 * @param confirmPassword 确认密码
 */
export function validatePasswordConfirm(password: string, confirmPassword: string): ValidationResult {
  if (!confirmPassword || confirmPassword.length === 0) {
    return { isValid: false, message: '请确认密码' }
  }

  if (password !== confirmPassword) {
    return { isValid: false, message: '两次输入的密码不一致' }
  }

  return { isValid: true }
}

/**
 * 验证登录用户名/邮箱/手机号
 * @param loginIdentifier 登录标识符（用户名/邮箱/手机号）
 */
export function validateLoginIdentifier(loginIdentifier: string): ValidationResult {
  if (!loginIdentifier || loginIdentifier.trim().length === 0) {
    return { isValid: false, message: '请输入用户名/邮箱/手机号' }
  }

  // 基本长度检查
  if (loginIdentifier.length > 50) {
    return { isValid: false, message: '输入内容过长' }
  }

  return { isValid: true }
}

/**
 * 验证登录表单
 * @param username 用户名/邮箱/手机号
 * @param password 密码
 */
export function validateLoginForm(username: string, password: string): ValidationResult {
  const usernameResult = validateLoginIdentifier(username)
  if (!usernameResult.isValid) {
    return usernameResult
  }

  const passwordResult = validatePassword(password, 1)
  if (!passwordResult.isValid) {
    return passwordResult
  }

  return { isValid: true }
}

/**
 * 验证注册表单
 * @param username 用户名
 * @param nickname 昵称
 * @param email 邮箱
 * @param password 密码
 * @param confirmPassword 确认密码
 * @param agreement 是否同意协议
 */
export function validateRegisterForm(
  username: string,
  nickname: string,
  email: string,
  password: string,
  confirmPassword: string,
  agreement: boolean
): ValidationResult {
  const usernameResult = validateUsername(username)
  if (!usernameResult.isValid) {
    return usernameResult
  }

  const passwordResult = validatePassword(password)
  if (!passwordResult.isValid) {
    return passwordResult
  }

  const confirmResult = validatePasswordConfirm(password, confirmPassword)
  if (!confirmResult.isValid) {
    return confirmResult
  }

  // 邮箱是可选的
  const emailResult = validateOptionalEmail(email)
  if (!emailResult.isValid) {
    return emailResult
  }

  if (!agreement) {
    return { isValid: false, message: '请同意用户协议和隐私政策' }
  }

  return { isValid: true }
}

/**
 * 显示验证错误提示
 * @param result 验证结果
 */
export function showValidationError(result: ValidationResult): void {
  if (!result.isValid && result.message) {
    uni.showToast({
      title: result.message,
      icon: 'error',
      duration: 2000
    })
  }
}

/**
 * 显示成功提示
 * @param message 成功消息
 */
export function showSuccessMessage(message: string): void {
  uni.showToast({
    title: message,
    icon: 'success',
    duration: 2000
  })
}